package com.w7vm.menuweb.managerBean;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.PersistenceException;
import javax.servlet.http.HttpSession;

import org.primefaces.event.CloseEvent;
import org.primefaces.event.RowEditEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.TransferEvent;
import org.primefaces.event.UnselectEvent;
import org.primefaces.model.DualListModel;
import org.springframework.security.core.context.SecurityContextHolder;

import com.w7vm.menuweb.dataModel.AcessoDataModel;
import com.w7vm.menuweb.entity.AcessoWeb;
import com.w7vm.menuweb.entity.RestauranteFilialWeb;
import com.w7vm.menuweb.entity.RestauranteSedeWeb;
import com.w7vm.menuweb.entity.UsuarioWeb;
import com.w7vm.menuweb.facade.AcessoFacade;
import com.w7vm.menuweb.message.MessageFaces;
import com.w7vm.menuweb.utility.Constantes;
import com.w7vm.menuweb.utility.PropertiesLoaderImpl;

@ManagedBean
@ViewScoped
public class AcessoMB implements Serializable{

	private static final long serialVersionUID = 1L;

	@EJB
	private AcessoFacade acessoEJB;
	private AcessoWeb acesso;
	
	private MessageFaces message = new MessageFaces();

	private List<AcessoWeb> usuariosL = null;
	private List<AcessoWeb> tipoAcessoL = null;
	private AcessoDataModel usuarioDataModelL;

	
	private LoginMB loginOjb = new LoginMB();
	private String perfilSessao = null;
	private String nomeRestauranteSede = null;
	private String nomeRestauranteCheck = null;
	
	private int idRestFilial;
	private String nomeSedeFilial;
	boolean resultadoValidaNovaP = false;

	private int idRestaurante;
	private int idUsuario;

	private int statusList;
	private int statusSelect;
	private int statusCheckAcesso = 0;
	
	Constantes objConst = new Constantes();

	//Picker - Filiais
	private List<AcessoWeb> filiaisAdmRestSource = new ArrayList<AcessoWeb>();
	private List<AcessoWeb> filiaisAdmRestTarget = new ArrayList<AcessoWeb>();
	private DualListModel<AcessoWeb> filiaisAdmRest;
	
	// PickerList ---- Restaurante
	private List<AcessoWeb> restauranteSource = new ArrayList<AcessoWeb>();
	private List<AcessoWeb> restauranteTarget = new ArrayList<AcessoWeb>();
	private DualListModel<AcessoWeb> restaurantePickView;

	
	// PickerList ---- Acesso Permitidos
	//private List<AcessoWeb> acessosSource = new ArrayList<AcessoWeb>();
	private List<AcessoWeb> acessosSource = new ArrayList<AcessoWeb>();
	private List<AcessoWeb> acessosTarget = new ArrayList<AcessoWeb>();
	private DualListModel<AcessoWeb> acessosPickView;
	private List<AcessoWeb> checkAcessoL = new ArrayList<AcessoWeb>();

	public String getPerfilSessao() {
		return perfilSessao = (String) loginOjb.getSessao("Perfil");
	}
	
	
/*----------------------- 	A L T E R A - A C E S S O-----------------------*/

	public int getStatusSelect() {
		return statusSelect;
	}

	public void setStatusSelect(int statusSelect) {
		this.statusSelect = statusSelect;
	}
	public int getStatusList() {
		return statusList;
	}

	public void setStatusList(int statusList) {
		this.statusList = statusList;
	}
	
	public int getIdRestaurante() {
		idRestaurante = (Integer) loginOjb.getSessao("IDRestaurante");
		System.out.println("getIdRestaurante "+ idRestaurante);
		return idRestaurante;
	}
	
	public String getNomeRestauranteSede() {
		this.nomeRestauranteSede = (String) loginOjb.getSessao("NomeFantasia");
		System.out.println("getNomeRestauranteSede :-------------------: "+ nomeRestauranteSede);
		return nomeRestauranteSede;
	}
	
	public void onRowSelect(SelectEvent event) {  
        FacesMessage msg = new FacesMessage("Car Selected", ((AcessoWeb) event.getObject()).getPerfil());  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    }  
  
    public void onRowUnselect(UnselectEvent event) {  
        FacesMessage msg = new FacesMessage("Car Unselected", ((AcessoWeb) event.getObject()).getPerfil());  
        FacesContext.getCurrentInstance().addMessage(null, msg);  
    } 
    
	public void loadInfTipoAcesso(){
		System.out.println("[MTH01]-[loadInfAcessoUsuarioLogado]");
		int idUsuario = (Integer) loginOjb.getSessao("IDUsuario");
		tipoAcessoL = acessoEJB.findTipoAcessoByIDUsuario(idUsuario);
		System.out.println("[MTH01]-[loadInfAcessoUsuarioLogado][Size] "+ tipoAcessoL.size());
	}
	
	public List<AcessoWeb> getTipoAcessoL() {
		loadInfTipoAcesso();
		return tipoAcessoL;
	}
	
	public int validaAlteracao(AcessoWeb entity) {
		int resultado = 0;
		int idRestaurante = (Integer) loginOjb.getSessao("IDRestaurante");
		
		System.out.println("[MTH01]-[ValidaAlteracao]");
		
		for (int i = 0; i < usuariosL.size(); i++) {
			AcessoWeb acc = (AcessoWeb) usuariosL.get(i);

			System.out.println("[MTH01]-[validaAlteracao][For I]"+ i);

			System.out.println("[MTH01]-[validaAlteracao][IdRestFilial]"+ getIdRestFilial());

			System.out.println("---------------------------------------------------------------------");
			
			System.out.println("[MTH0001]-[valida][USERNAME]"+ acc.getUsuarioWeb().getUsername());
			System.out.println("[MTH0002]-[validaAlteracao][AcessoFilial]"+ acc.getAcessoFilial());
			System.out.println("[MTH0003]-[validaAlteracao][IdRestaurante]"+ acc.getRestauranteSedeWeb().getIdRestauranteSedeWeb());
			System.out.println("[MTH0004]-[validaAlteracao][Status]"+ acc.getStatus());

			System.out.println("---------------------------------------------------------------------");

			System.out.println("[MTH0001]-[valida][OBJ-USERNAME]"+ entity.getUsuarioWeb().getUsername());
			System.out.println("[MTH0002]-[validaAlteracao][OBJ-AcessoFilial]"+ entity.getAcessoFilial());
			System.out.println("[MTH0003]-[validaAlteracao][OBJ-IdRestaurante]"+ getIdRestFilial());
			System.out.println("[MTH0004]-[validaAlteracao][OBJ-Status]"+ getStatusSelect());

			System.out.println("---------------------------------------------------------------------");
			
			
			// RN :: Verifica se já existe restaurante cadastrado
			if(acc.getUsuarioWeb().getUsername().equals(entity.getUsuarioWeb().getUsername()) &&
					acc.getAcessoFilial().equals("N") && 
					acc.getRestauranteSedeWeb().getIdRestauranteSedeWeb() == getIdRestFilial() &&
					acc.getStatus() == getStatusSelect()){

				System.out.println("[MTH01]-[validaAlteracao][IF R]"+ acc.getRestauranteSedeWeb().getIdRestauranteSedeWeb());
				resultado = 1;
				return resultado; 

			}// RN :: Verifica se já existe filial cadastrado 
			else if(acc.getUsuarioWeb().getUsername().equals(entity.getUsuarioWeb().getUsername()) &&
					acc.getAcessoFilial().equals("S") && 
					acc.getRestauranteFilialWeb().getIdRestauranteFilialWeb() == getIdRestFilial() &&
					acc.getStatus() == getStatusSelect()){
				System.out.println("[MTH01]-[validaAlteracao][IF F]"+ acc.getRestauranteFilialWeb().getIdRestauranteFilialWeb());

				resultado = 1;
				return resultado;
				
			}// RN :: Altera o Status Restaurante
			else if(acc.getUsuarioWeb().getUsername().equals(entity.getUsuarioWeb().getUsername()) &&
					acc.getAcessoFilial().equals("N") && 
					acc.getRestauranteSedeWeb().getIdRestauranteSedeWeb() == getIdRestFilial() &&
					acc.getStatus() != getStatusSelect()){
				System.out.println("[MTH01]-[validaAlteracao][Alteração STATUS Restaurante]"+ acc.getStatus());
				setStatusList(acc.getStatus());
			}
			// RN :: Altera o Status filial  
			else if(acc.getUsuarioWeb().getUsername().equals(entity.getUsuarioWeb().getUsername()) &&
					acc.getAcessoFilial().equals("S") && 
					acc.getRestauranteFilialWeb().getIdRestauranteFilialWeb() == getIdRestFilial() &&
					acc.getStatus() != getStatusSelect()){
				System.out.println("[MTH01]-[validaAlteracao][Alteração STATUS FIlial]"+ acc.getStatus());
				setStatusList(acc.getStatus());
			}
		}
		return resultado;
	}

/*----------------------- 	LOGOUT APP -----------------------*/

	public void logoutPageBean(){
        System.out.println("logoutPageBean()");
        SecurityContextHolder.getContext().setAuthentication(null);
        invalidateSession();
    }
	
	public void logout(){
        System.out.println("logout()");
        SecurityContextHolder.getContext().setAuthentication(null);
        invalidateSession();
        redirecionaPaginaInicial();
    }

	private void invalidateSession() {
        FacesContext fc = FacesContext.getCurrentInstance();
        HttpSession s = (HttpSession) fc.getExternalContext().getSession(false);
        s.invalidate();
    }
	
	public void redirecionaPaginaInicial(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../public/index.jsf");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
/*----------------------- 	C O N S U L T A - U S U A R I O -----------------------*/
	
	
	public AcessoWeb getAcesso() {
		return acesso;
	}

	public void setAcesso(AcessoWeb acesso) {
		loginOjb.gravarSessaoPerfilUsuario(acesso.getUsuarioWeb().getIdUsuarioWeb());
		this.acesso = acesso;
	}

	public int getIdRestFilial() {
		return idRestFilial;
	}


	public void setIdRestFilial(int idRestFilial) {
		System.out.println("setIdRestFilial "+ idRestFilial);
		this.idRestFilial = idRestFilial;
	}
	
	public AcessoDataModel getUsuarioDataModelL() {
		usuariosL =  new ArrayList<AcessoWeb>();
		usuariosL = ListUsuarioByPerfil();
		usuarioDataModelL = new AcessoDataModel(usuariosL);

		return usuarioDataModelL;
	}
	
	public List<AcessoWeb> ListUsuarioByPerfil(){
		System.out.println("ListUsuarioByPerfil");
		List<AcessoWeb> usuarioAcessoL = null;
		List<AcessoWeb> usuarioAcessoFilialL = null;

		String profileUser = (String) loginOjb.getSessao("Perfil");
		System.out.println("[ListUsuarioByPerfil]-[Perfil] :: "+ profileUser);

		if(profileUser.equals(objConst.PERFIL_ADMIN_CONTA)){
			int idRestaurante = (Integer) loginOjb.getSessao("IDRestaurante");
			if(usuarioAcessoL == null){
				usuarioAcessoL = acessoEJB.findUsuariosByPerfilAdmConta(idRestaurante);
			}
			else{
		 		return usuarioAcessoL;
			}
			System.out.println("ListUserbyProfie"+ usuarioAcessoL.size());

		} else if(profileUser.equals(objConst.PERFIL_ADMIN_RESTAURANTE)){
			System.out.println("PERFIL_ADMIN_RESTAURANTE "+ profileUser);
			int idUsuario = (Integer) loginOjb.getSessao("IDUsuario");
			int idRestaurante = (Integer) loginOjb.getSessao("IDRestaurante");
			System.out.println("ListUsuarioByPerfil idUsuario"+ idUsuario);
			System.out.println("ListUsuarioByPerfil idUsuario"+ idRestaurante);
			if(usuarioAcessoL == null){
				
				System.out.println("================= Acesso Query =================");
				usuarioAcessoL = acessoEJB.findUsuariosByPerfilAdmRestaurante(idUsuario,idRestaurante,objConst.Sede);
				usuarioAcessoFilialL = acessoEJB.findUsuariosByPerfilAdmRestaurante(idUsuario,idRestaurante,objConst.Filial);
				
				if(usuarioAcessoFilialL != null){
					System.out.println("Tamanho List --> usuarioAcessoFilialL  "+ usuarioAcessoFilialL.size());
					usuarioAcessoL.addAll(usuarioAcessoFilialL);
				}
			}
			else{
		 		return usuarioAcessoL;
			}
		} else if(profileUser.equals(objConst.PERFIL_USUARIO)){
			String username = (String) loginOjb.getSessao("Usuario");
			if(usuarioAcessoL == null){
				System.out.println("[USUARIO] - usuarioAcessoL - ACESSO: "+ usuarioAcessoL.size());
				usuarioAcessoL = acessoEJB.findUsuariosByPerfilUsuario(username);
				System.out.println("[USUARIO] - usuarioAcessoL - TAMANHO LIST: "+ usuarioAcessoL.size());
			}
			else{
		 		return usuarioAcessoL;
			}
		}
 		return usuarioAcessoL;
	}
	
	public AcessoWeb update(AcessoWeb entity){
		System.out.println("update");
		return acessoEJB.updateAcesso(entity);
	}
	
	public String onEdit(RowEditEvent event) {
		System.out.println("RowEditEvent");
		acesso = ((AcessoWeb)  event.getObject());
		String nomeUsuario = acesso.getUsuarioWeb().getUsername();
		
		if(validaAlteracao(acesso) == 0){
			System.out.println("validaAlteracao YES");

			int idRestaurante = (Integer) loginOjb.getSessao("IDRestaurante");

			// RN = Alteração para acesso Restaurante Sede, não alterando o Status
			if(getIdRestFilial() == idRestaurante && 
					getStatusSelect() == getStatusList()){
				
				System.out.println("Change Restaurante Sede");
				RestauranteFilialWeb entityFilial = new RestauranteFilialWeb();
				entityFilial = null;
				acesso.setRestauranteFilialWeb(entityFilial);
				acesso.setAcessoFilial("N");
				acesso.getRestauranteSedeWeb().setIdRestauranteSedeWeb(idRestaurante);
				System.out.println("[MTH01]-[onEditAcesso][Salvar Restaurante] ");
				
			}
			else if(getIdRestFilial() == idRestaurante && 
					getStatusSelect() != getStatusList()){

				System.out.println("No Change Restaurante Sede, change Status");
				RestauranteFilialWeb entityFilial = new RestauranteFilialWeb();
				entityFilial = null;
				acesso.setRestauranteFilialWeb(entityFilial);
				acesso.setAcessoFilial("N");
				acesso.getRestauranteSedeWeb().setIdRestauranteSedeWeb(idRestaurante);
				acesso.setStatus(getStatusSelect());
				System.out.println("[MTH01]-[onEditAcesso][Salvar Restaurante] ");
				
			} 				
			// RN = Alteração para acesso Restaurante Filial, não alterando o status
			else if(getIdRestFilial() != idRestaurante && 
					getStatusSelect() == getStatusList()){
				System.out.println("Change Restaurante Filial");
				RestauranteFilialWeb entityFilial = new RestauranteFilialWeb();
				entityFilial.setIdRestauranteFilialWeb(getIdRestFilial());
				acesso.setAcessoFilial("S");
				acesso.setRestauranteFilialWeb(entityFilial);
				System.out.println("[MTH01]-[onEditAcesso][SAlvar Filial] "+ acesso.getRestauranteFilialWeb().getIdRestauranteFilialWeb());
			}
			// RN = Alteração para acesso Restaurante Filial, alterando o status
			else if(getIdRestFilial() != idRestaurante && 
					getStatusSelect() != getStatusList()){
				System.out.println("Change Restaurante Filial");
				RestauranteFilialWeb entityFilial = new RestauranteFilialWeb();
				entityFilial.setIdRestauranteFilialWeb(getIdRestFilial());
				acesso.setAcessoFilial("S");
				acesso.setRestauranteFilialWeb(entityFilial);
				acesso.setStatus(getStatusSelect());
				System.out.println("[MTH01]-[onEditAcesso][SAlvar Filial] "+ acesso.getRestauranteFilialWeb().getIdRestauranteFilialWeb());
			}
	 
			try{
				acesso = update(acesso);
				if(!acesso.equals(null)){
					usuariosL = null;
					String msg = PropertiesLoaderImpl.getValor("tSuccessAltUsuario");
					message.sendInfoMessageToUser(nomeUsuario, msg);
					FacesContext.getCurrentInstance().getExternalContext().redirect("../user/consUsuario.jsf");
				}
			} catch (Exception ex) {
				ex.printStackTrace();
				String msg = PropertiesLoaderImpl.getValor("tErrorAltUsuario");
				message.sendInfoMessageToUser(nomeUsuario, msg);
			}
		return "consUsuario";
		}
		else{
			String msg = PropertiesLoaderImpl.getValor("tValidaUsuario");
			message.sendErrorMessageToUser(nomeUsuario, msg);
			return "consUsuario";
		}
	}  
	      
	public void onCancel(RowEditEvent event) {  
	    FacesMessage msg = new FacesMessage("Usuário Cancelar", ((AcessoWeb) event.getObject()).getUsuarioWeb().getUsername());  
	    FacesContext.getCurrentInstance().addMessage(null, msg);  
	}
	
/*----------------------- P I C K E R  - F I L I A L (ACESSO ADM_RESTAURANTE) -----------------------*/

	public List<AcessoWeb> getFiliaisAdmRestSource() {
		String username = (String) loginOjb.getSessao("Usuario");
		filiaisAdmRestSource = acessoEJB.findUsuariosByPerfilUsuario(username);
		filiaisAdmRest = new DualListModel<AcessoWeb>(filiaisAdmRestSource, filiaisAdmRestTarget);
		return filiaisAdmRestSource;
	}

	public DualListModel<AcessoWeb> getFiliaisAdmRest() {
		getFiliaisAdmRestSource();
		return filiaisAdmRest;
	}

	public void setFiliaisAdmRest(DualListModel<AcessoWeb> filiaisAdmRest) {
		this.filiaisAdmRest = filiaisAdmRest;
	}

	public List<AcessoWeb> getFiliaisAdmRestTarget() {
		return filiaisAdmRest.getTarget();
	}

	public void setFiliaisAdmRestTarget(List<AcessoWeb> filiaisAdmRestTarget) {
		this.filiaisAdmRestTarget = filiaisAdmRestTarget;
	}
	
	public void onTransfer(TransferEvent event) {  
        StringBuilder builder = new StringBuilder();  
        for(Object item : event.getItems()) {  
        	builder.append(((AcessoWeb) item).getRestauranteFilialWeb().getRestauranteFilialJuridicoWeb().getNomeFantasiaFilial()).append("<br />");
        }  
    }
	
/*-------------------------------- P I C K E R  - R E S T A U R A N T E ---------------------------------------*/

	public DualListModel<AcessoWeb> getRestaurantePickView() {
		return restaurantePickView;
	}

	public void setRestaurantePickView(
			DualListModel<AcessoWeb> restaurantePickView) {
		this.restaurantePickView = restaurantePickView;
	}


	public List<AcessoWeb> getRestauranteSource() {
		carregaRestauranteAcessoSource();
		return restauranteSource;
	}


	public void setRestauranteSource(List<AcessoWeb> restauranteSource) {
		this.restauranteSource = restauranteSource;
	}

	public List<AcessoWeb> carregaRestauranteAcessoSource() {
		String profileUser = (String) loginOjb.getSessao("Perfil");
	
		int idUsuario = (Integer) loginOjb.getSessao("IDUsuario");
		System.out.println("RestauranteSource "+ idUsuario);
	
		restauranteSource = acessoEJB.findRestauranteAcessoByIDUsuario(idUsuario);

		restaurantePickView = new DualListModel<AcessoWeb>(restauranteSource,restauranteTarget);
		return restauranteSource;
	}
	

	public List<AcessoWeb> getRestauranteTarget() {
		return restaurantePickView.getTarget();
	}

	public void setRestauranteTarget(List<AcessoWeb> restauranteTarget) {
		this.restauranteTarget = restauranteTarget;
	}

	
    public void onTransferRestaurante(TransferEvent event) {  
        StringBuilder builder = new StringBuilder();  
        for(Object item : event.getItems()) {  
        	builder.append(((AcessoWeb) item).getRestauranteSedeWeb().getRestauranteSedeJuridicoWeb().getNomeFantasia()).append("<br />");
        }  
    }

/*-------------------------------- P I C K E R  - A C E S S O S ---------------------------------------*/

	public DualListModel<AcessoWeb> getAcessosPickView() {
		loadAcessosSource();
		return acessosPickView;
	}

	public void setAcessosPickView(DualListModel<AcessoWeb> acessosPickView) {
		this.acessosPickView = acessosPickView;
	}


	public List<AcessoWeb> getAcessosSource() {
		return acessosSource;
	}


	public void setAcessosSource(List<AcessoWeb> acessosSource) {
		this.acessosSource = acessosSource;
	}

	public List<AcessoWeb> loadAcessosSource() {
	    	System.out.println("loadAcessosSource() ");
			int idUsuario = (Integer) loginOjb.getSessao("IDUsuario");
	    	acessosSource = acessoEJB.findUsuarioAcessoByIDUsuario(idUsuario); 
			acessosPickView = new DualListModel<AcessoWeb>(acessosSource,acessosTarget);
			return acessosSource;
	}
	

	public List<AcessoWeb> getAcessosTarget() {
		return acessosPickView.getTarget();
	}
	
    public void onTransferAcessos(TransferEvent event) {  
        StringBuilder builder = new StringBuilder();  
        for(Object item : event.getItems()) {  
        	builder.append(((AcessoWeb) item).getRestauranteSedeWeb()).append("<br />");
        	builder.append(((AcessoWeb) item).getRestauranteFilialWeb()).append("<br />");
        }  
    }


	public int getStatusCheckAcesso() {
		return statusCheckAcesso;
	}

	public void setStatusCheckAcesso(int statusCheckAcesso) {
		this.statusCheckAcesso = statusCheckAcesso;
	}


	public List<AcessoWeb> getCheckAcessoL() {
		return checkAcessoL;
	}


	public void setCheckAcessoL(List<AcessoWeb> checkAcessoL) {
		this.checkAcessoL = checkAcessoL;
	}
	
	public boolean validaNovaPermissaoAcesso(){
		System.out.println("validaNovaPermissaoAcesso");
		int idUsuario = (Integer) loginOjb.getSessao("IDUsuario");

		List<AcessoWeb> acessoUser = null;
		List<AcessoWeb> acessoUserAdmRest = null;
		List<AcessoWeb> resultPermissao = new ArrayList<AcessoWeb>();
		
		List<AcessoWeb> acessoPerfilUser = null;
		acessoPerfilUser = getAcessosTarget(); 

		System.out.println("validaNovaPermissaoAcesso() IDUsuario-Alterado  "+ getIdUsuario());

		acessoUser = acessoEJB.findUsuarioAcessoByIDUsuario(getIdUsuario());
		//acessoUserAdmRest = acessoEJB.findUsuarioAcessoByIDUsuario(idUsuario);
		
		System.out.println("TAmanho LIST SELECIONADA   "+ getAcessosTarget().size());
		
		for(int i = 0; i <= acessoPerfilUser.size()-1; i++ ){ // List - Acesso Selecionado Tela
				System.out.println("For List - Acesso Usuario");
	
				System.out.println(" ");
				System.out.println("TAmanho List acessoUserAdmRest "+ acessoPerfilUser.size());
				System.out.println("Indica List acessoUserAdmRest "+ i);
				System.out.println("TAmanho List acessoUser "+ acessoUser.size());
				System.out.println(" ");
				
				AcessoWeb acessoUserAdmObj = acessoPerfilUser.get(i);
				
				System.out.println("VALOR DE ACESSO FILIAL TELA   "+ acessoUserAdmObj.getAcessoFilial());
				
				for(int j = 0; j <= acessoUser.size()-1 ; j++ ){ // List - Acessos Usuario Database
	
					System.out.println("Indice List acessoUser "+ j);
					
					AcessoWeb acessoUserObj = acessoUser.get(j);

					System.out.println("VALOR DE ACESSO FILIAL USUARIO    "+ acessoUserObj.getAcessoFilial());

					if(acessoUserObj.getAcessoFilial().equals("N") &&  // IF Restaurante
							acessoUserAdmObj.getAcessoFilial().equals("N")){
	
						System.out.println("[ValidaNovaPermissaoAcesso][acessoUserObj/acessoUserAdmObj = AcessoFilial S]");
						resultadoValidaNovaP = false;
						nomeRestauranteCheck = acessoUserAdmObj.getRestauranteSedeWeb().getRestauranteSedeJuridicoWeb().getNomeFantasia();
						return resultadoValidaNovaP;
					}
					else if(acessoUserObj.getAcessoFilial().equals("S") &&    //Permissao DEve ser concedida
							acessoUserAdmObj.getAcessoFilial().equals("N") ||
							acessoUserObj.getAcessoFilial().equals("N") &&
							acessoUserAdmObj.getAcessoFilial().equals("S")) {
	
						System.out.println("[ValidaNovaPermissaoAcesso][acessoUserObj = S|N / acessoUserAdmObj= S|N ]");
						resultadoValidaNovaP = true;
					}
					else if(acessoUserObj.getAcessoFilial().equals("S") &&
							acessoUserAdmObj.getAcessoFilial().equals("S") &&
							acessoUserObj.getRestauranteFilialWeb().getIdRestauranteFilialWeb() !=
							acessoUserAdmObj.getRestauranteFilialWeb().getIdRestauranteFilialWeb()) {
	
						System.out.println("[ValidaNovaPermissaoAcesso][acessoUserObj acessoUserAdmObj= S/diferente ]");
						resultadoValidaNovaP = true;
	
					}
					else if(acessoUserObj.getAcessoFilial().equals("S") &&
							acessoUserAdmObj.getAcessoFilial().equals("S") &&
							acessoUserObj.getRestauranteFilialWeb().getIdRestauranteFilialWeb() ==
							acessoUserAdmObj.getRestauranteFilialWeb().getIdRestauranteFilialWeb()) {
	
						System.out.println("[ValidaNovaPermissaoAcesso][acessoUserObj/acessoUserAdmObj = AcessoFilial S]");
						resultadoValidaNovaP = false;
						nomeRestauranteCheck = acessoUserAdmObj.getRestauranteFilialWeb().getRestauranteFilialJuridicoWeb().getNomeFantasiaFilial();
						return resultadoValidaNovaP;
					}
				}
		}
		return resultadoValidaNovaP; 
	}
	
	public void salvarNovoAcesso() throws IOException{
		System.out.println("SalvarNovoAcesso()");

		int idUsuarioAlt = (Integer) loginOjb.getSessao("IDPerfilUsuario");
		setIdUsuario(idUsuarioAlt);
		
		System.out.println("SalvarNovoAcesso() IDUsuario  "+ getIdUsuario());

		AcessoWeb acessoEntity = new AcessoWeb();
		System.out.println("getAcessosTarget().size() "+ getAcessosTarget().size());

		if(acessosPickView.getTarget().size() < 0){
			String msgTitulo = PropertiesLoaderImpl.getValor("tErroValidacaoAcesso");
			message.sendErrorMessageToUser(msgTitulo,"");
		}
		else if(validaNovaPermissaoAcesso() == true){
				
			String nomeRestauranteSede = (String) loginOjb.getSessao("NomeFantasia");
			
			for(AcessoWeb acessoObj : getAcessosTarget()){  // Qtde de filial selecionada
				RestauranteFilialWeb objFilial = new RestauranteFilialWeb();
				RestauranteSedeWeb objRestaurante = new RestauranteSedeWeb();
				UsuarioWeb usuarioObj = new UsuarioWeb();
					
				if(acessoObj.getAcessoFilial().equals("N")
						&& acessoObj.getRestauranteFilialWeb() == null){
	
					System.out.println("Persiste Novo Permissao Acesso - RESTAURANTE SEDE");
					objFilial = null;
					objRestaurante.setIdRestauranteSedeWeb(acessoObj.getRestauranteSedeWeb().getIdRestauranteSedeWeb());
					usuarioObj.setIdUsuarioWeb(idUsuarioAlt);
					acessoEntity.setAcessoFilial("N");
					acessoEntity.setPerfil("USUARIO");
					acessoEntity.setStatus(1);
					acessoEntity.setRestauranteSedeWeb(objRestaurante);
					acessoEntity.setRestauranteFilialWeb(objFilial);
					acessoEntity.setUsuarioWeb(usuarioObj);
				}
				else{
					System.out.println("Persiste Novo Permissao Acesso - RESTAURANTE FILIAL");
					objFilial.setIdRestauranteFilialWeb(acessoObj.getRestauranteFilialWeb().getIdRestauranteFilialWeb());
					objRestaurante.setIdRestauranteSedeWeb(acessoObj.getRestauranteSedeWeb().getIdRestauranteSedeWeb());
					usuarioObj.setIdUsuarioWeb(idUsuarioAlt);
					acessoEntity.setAcessoFilial("S");
					acessoEntity.setPerfil("USUARIO");
					acessoEntity.setStatus(1);
					acessoEntity.setUsuarioWeb(usuarioObj);
					acessoEntity.setRestauranteSedeWeb(objRestaurante);
					acessoEntity.setRestauranteFilialWeb(objFilial);
				}					
					
				try{
					acessoEJB.saveAcesso(acessoEntity);
				} catch (PersistenceException e) {
					e.printStackTrace();
					String msgTitulo = PropertiesLoaderImpl.getValor("tErroCadUsuario");
					message.sendErrorMessageToUser(nomeRestauranteCheck, msgTitulo);
				}
			}
			String msgTitulo = PropertiesLoaderImpl.getValor("tSuccessCadUsuario");
			message.sendInfoMessageToUser(msgTitulo, "");
			acesso = new AcessoWeb();		
			FacesContext.getCurrentInstance().getExternalContext().redirect("../user/consUsuario.jsf");
		}
		else{
			String msgTitulo = PropertiesLoaderImpl.getValor("tErrorAddPermissaoUsuario");
			message.sendErrorMessageToUser(nomeRestauranteCheck,msgTitulo);
		} 
	}


	public String getNomeSedeFilial() {
		return nomeSedeFilial;
	}


	public void setNomeSedeFilial(String nomeSedeFilial) {
		this.nomeSedeFilial = nomeSedeFilial;
	}


	public boolean getResultadoValidaNovaP() {
		System.out.println("getResultadoValidaNovaP()"+ resultadoValidaNovaP);
		return resultadoValidaNovaP;
	}


	public void setResultadoValidaNovaP(boolean resultadoValidaNovaP) {
		System.out.println("setResultadoValidaNovaP()"+ resultadoValidaNovaP);
		this.resultadoValidaNovaP = resultadoValidaNovaP;
	}


	public int getIdUsuario() {
		return idUsuario;
	}


	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}


	public String getNomeRestauranteCheck() {
		return nomeRestauranteCheck;
	}


	public void setNomeRestauranteCheck(String nomeRestauranteCheck) {
		this.nomeRestauranteCheck = nomeRestauranteCheck;
	}
	
	public void handleClose(CloseEvent event) throws IOException {  
		FacesContext.getCurrentInstance().getExternalContext().redirect("../user/consUsuario.jsf");
    }  

}
